Flash memory devices store information by placing charge on a floating gate. For example, single-level cell (SLC) flash devices store binary information in a cell by either programming a level of charge in the cell or leaving the cell erased. In multi-level cell (MLC) flash devices, multiple bits are stored in a cell by placing one of several possible levels of charge on the cell or leaving the cell erased. During a read operation, a series of voltage comparisons allows an estimate of charge levels for a particular cell. Each level is associated with a binary pattern. By estimating the charge level, an estimate of the bit pattern for each charge level can be made.
In some instances, the threshold voltage for certain cells may be very close to the read levels that were used in the comparison of different levels. As a result, the read levels that are used for the comparisons must be chosen accurately in order to minimize the number of errors. The optimal read levels change as a function of time depending on the state of the flash. Because the true state of the flash is almost never known, a singular optimal placement of the read levels may not be possible. Thus, in order to improve the error rate it is useful to have not just the bit estimates, but also an indication of the reliability of each estimate. This reliability measure is called “soft information” and it is not provided directly from the flash memory.